
//此源码被清华学神尹成大魔王专业翻译分析并修改
//尹成QQ77025077
//尹成微信18510341407
//尹成所在QQ群721929980
//尹成邮箱 yinc13@mails.tsinghua.edu.cn
//尹成毕业于清华大学,微软区块链领域全球最有价值专家
//https://mvp.microsoft.com/zh-cn/PublicProfile/4033620
//版权所有（c）2015-2016 BTCSuite开发者
//此源代码的使用由ISC控制
//可以在许可文件中找到的许可证。

/*
包数据库提供块和元数据存储数据库。

概述

截至2016年2月，比特币区块链中有40多万个区块，并且
超过1.12亿笔交易（数据量超过60GB）。
此包提供一个数据库层，用于在
简单有效的方式。

默认后端ffldb非常注重速度、效率和
稳健性。它使用leveldb作为元数据，使用平面文件作为块
在关键区域存储和严格的校验和以确保数据完整性。

数据库提供的功能的快速概述如下：

 -键/值元数据存储
 -比特币区块存储
 -高效检索块头和区域（事务、脚本等）
 -具有手动和管理模式的只读和读写事务
 -嵌套存储桶
 -支持注册后端数据库
 -全面的测试覆盖

数据库

主要入口点是DB接口。它公开了
基于事务的元数据和块数据的访问和存储。它是
通过采用数据库类型字符串的创建和打开函数获取
标识要使用的特定数据库驱动程序（后端）以及
特定于指定驱动程序的参数。

接口提供获取事务的工具（Tx接口）
这是所有数据库读写的基础。与某些数据库不同
支持无事务读写的接口，此接口
即使只读取或写入一个键，也需要事务处理。

当视图和更新
函数提供托管事务。更详细地描述了这些
下面。

交易

Tx接口提供了回滚或提交
在事务处于活动状态时发生。它还提供根元数据
存储所有键、值和嵌套存储桶的存储桶。一
事务可以是只读的，也可以是读写的，可以是托管的，也可以是非托管的。

托管与非托管事务

托管事务是调用方提供要执行的函数的事务。
在事务上下文中处理提交或回滚
根据所提供的函数是否返回
错误。尝试在托管的上手动调用回滚或提交
交易将导致恐慌。

另一方面，非托管事务要求调用方手动
完成后调用commit或rollback。离开交易记录
长时间开放可能会产生一些不利影响，因此
建议改用托管事务。

桶

Bucket接口提供了操作键/值对和
嵌套的bucket以及循环访问它们。

get、put和delete函数与key/value对一起工作，而bucket，
CreateBack、CreateBacketifNotexists和DeleteBack函数使用
桶。foreach函数允许调用方提供
用当前bucket中的每个键/值对和嵌套bucket调用。

元数据桶

如上所述，所有用于操作键/值的函数
在bucket接口上存在对和嵌套bucket。根元数据
bucket是存储数据并在
与数据库的时间相同。在Tx接口上使用元数据函数
检索它。

嵌套桶

在bucket接口上，createBucketifNotexists和createBucketifNotexists函数
提供创建任意数量嵌套存储桶的能力。它是
一个好主意是避免使用大量存储桶，因为这些存储桶中的数据可能会导致
取决于所使用的特定驱动程序的页面利用率差。
**/

package database
